#include<bits/stdc++.h> 
using namespace std;
//	123456789是一个9个数码组成的且由1~9组成的数字，没有重复。将它*2后，得到246913578，也
//	是一个符合这个条件的数字。现在检查是否有更多具有这个特性的数字，即把一个k数码的数字
//	翻倍后，需要判断它是否还是由原来数字的数码组成的。
//1.每个输入具有一个测试用例，每个用例具有一个不超过20位的正整数
//2.对于每个测试用例，首先输出"Yes"或者"No"来表示这个数字是否符合这个特性，然后输出2倍的
//	结果
//3.大整数乘法，桶计数
vector<int> ans;	//存储大整数乘法的结果 
map<char,int> numMap;	//用于进行字符和数字的转换 
bool digit[10];	//原数据的数码情况 
bool digit_[10];	//乘法结果的数码情况 
void init(){	//生成字符数字映射表 
	for(int i = 0;i<10;i++) numMap['0'+i] = i;
}
int main(){
	string s;
	cin>>s;
	init();
	int c = 0;
	fill(digit, digit+10,false);
	fill(digit_, digit_+10,false);
	for(int i = s.length()-1;i>=0;i--){	//从后往前读数码 
		int m = numMap[s[i]];
		digit[m] = true; 	//有这个数码就置为true 
		ans.push_back(((m*2)%10+c));	//数码*2模10后，加上上次运算的进位 
		c = (m * 2) / 10;	//这次的进位是*2/10 
	}
	if(c!=0) ans.push_back(c);	//如果最后还有进位，就证明位数要比原来多，这个进位也得算进来 
	for(int i = ans.size()-1;i>=0;i--){	//遍历结果的向量，把相关数码置为true; 
		digit_[ans[i]] = true;
	}
	for(int i = 0;i<10;i++){
		if(digit[i]!=digit_[i]){	//只要有一个不对劲就可以输出No了 
			cout<<"No"<<endl;
			for(int i=ans.size()-1;i>=0;i--){
				cout<<ans[i];
			}
			cout<<endl;
			return 0;
		}
	}
	cout<<"Yes"<<endl;
	for(int i=ans.size()-1;i>=0;i--){
		cout<<ans[i];
	}
	cout<<endl;
	return 0;
} 